﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using System.Data;
using System.Data.SqlClient;
using Gem_Tools_Entity.Gem_Tools;
using Gem_Tools_DataLayer;
using Gem_Tools_Utility;

namespace Gem_Tools_Controller.Gem_Tools
{
    public class CResources_Controller
    {
        private void MapResources(DataRow p_row, CResources p_objDes)
        {
            DataTable p_dt = p_row.Table;

            if (p_dt.Columns.Contains("Auto_ID"))
                p_objDes.Auto_ID = CUtility.Convert_To_Int32(p_row["Auto_ID"]);

            if (p_dt.Columns.Contains("Project_ID"))
                p_objDes.Project_ID = CUtility.Convert_To_Int32(p_row["Project_ID"]);

            if (p_dt.Columns.Contains("Asset_ID"))
                p_objDes.Asset_ID = CUtility.Convert_To_Int32(p_row["Asset_ID"]);

            if (p_dt.Columns.Contains("Staff_ID"))
                p_objDes.Staff_ID = CUtility.Convert_To_Int32(p_row["Staff_ID"]);

            if (p_dt.Columns.Contains("Status_ID"))
                p_objDes.Status_ID = CUtility.Convert_To_Int32(p_row["Status_ID"]);

            if (p_dt.Columns.Contains("ID_Sort"))
                p_objDes.ID_Sort = CUtility.Convert_To_Int32(p_row["ID_Sort"]);

            if (p_dt.Columns.Contains("Parent_ID"))
                p_objDes.Parent_ID = CUtility.Convert_To_Int32(p_row["Parent_ID"]);

            if (p_dt.Columns.Contains("Name"))
                p_objDes.Name = CUtility.Convert_To_String(p_row["Name"]);

            if (p_dt.Columns.Contains("Color"))
                p_objDes.Color = CUtility.Convert_To_Int32(p_row["Color"]);

            if (p_dt.Columns.Contains("Image_Index"))
                p_objDes.Image_Index = CUtility.Convert_To_Int32(p_row["Image_Index"]);

            if (p_dt.Columns.Contains("Start_Date"))
                p_objDes.Start_Date = CUtility.Convert_To_DateTime(p_row["Start_Date"]);

            if (p_dt.Columns.Contains("End_Date"))
                p_objDes.End_Date = CUtility.Convert_To_DateTime(p_row["End_Date"]);

            if (p_dt.Columns.Contains("Manday"))
                p_objDes.Manday = CUtility.Convert_To_Double(p_row["Manday"]);

            if (p_dt.Columns.Contains("Note"))
                p_objDes.Note = CUtility.Convert_To_String(p_row["Note"]);

            if (p_dt.Columns.Contains("Created"))
                p_objDes.Created = CUtility.Convert_To_DateTime(p_row["Created"]);

            if (p_dt.Columns.Contains("Created_By"))
                p_objDes.Created_By = CUtility.Convert_To_String(p_row["Created_By"]);

            if (p_dt.Columns.Contains("Deleted"))
                p_objDes.Deleted = CUtility.Convert_To_Int32(p_row["Deleted"]);

            if (p_dt.Columns.Contains("Last_Updated"))
                p_objDes.Last_Updated = CUtility.Convert_To_DateTime(p_row["Last_Updated"]);

            if (p_dt.Columns.Contains("Last_Updated_By"))
                p_objDes.Last_Updated_By = CUtility.Convert_To_String(p_row["Last_Updated_By"]);

        }

        public IList<CResources> List_Resources()
        {
            IList<CResources> v_arrResources = new List<CResources>();
            DataTable v_dt = new DataTable();

            try
            {
                CSqlHelper.FillDataTable(CConfig.g_strGem_Tools_Conn_String, v_dt, "sp_sel_List_Resources");

                foreach (DataRow v_row in v_dt.Rows)
                {
                    CResources v_objResources = new CResources();
                    MapResources(v_row, v_objResources);
                    v_arrResources.Add(v_objResources);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                v_dt.Dispose();
            }

            return v_arrResources;
        }

        public CResources Get_Resources_By_ID(int p_iID)
        {
            CResources v_objResources = null;
            DataTable v_dt = new DataTable();

            try
            {
                CSqlHelper.FillDataTable(CConfig.g_strGem_Tools_Conn_String, v_dt, "sp_sel_Get_Resources_By_ID", p_iID);

                if (v_dt.Rows.Count > 0)
                {
                    v_objResources = new CResources();
                    MapResources(v_dt.Rows[0], v_objResources);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                v_dt.Dispose();
            }

            return v_objResources;
        }

        public int Insert_Resources(CResources p_objData)
        {
            int v_iRes = CConst.INT_VALUE_NULL;

            try
            {
                v_iRes = Convert.ToInt32(CSqlHelper.ExecuteScalar(CConfig.g_strGem_Tools_Conn_String, "sp_ins_Resources",
                            p_objData.Project_ID, p_objData.Asset_ID, p_objData.Staff_ID, p_objData.Status_ID, p_objData.ID_Sort, p_objData.Parent_ID, p_objData.Name, p_objData.Color, p_objData.Image_Index, p_objData.Start_Date, p_objData.End_Date, p_objData.Manday, p_objData.Note, p_objData.Last_Updated_By).ToString());

            }
            catch (Exception ex)
            {
                throw ex;
            }


            return v_iRes;
        }

        public void Update_Resources(CResources p_objData)
        {
            try
            {
                CSqlHelper.ExecuteNonquery(CConfig.g_strGem_Tools_Conn_String, "sp_upd_Resources",
                            p_objData.Auto_ID, p_objData.Project_ID, p_objData.Asset_ID, p_objData.Staff_ID, p_objData.Status_ID, p_objData.ID_Sort, p_objData.Parent_ID, p_objData.Name, p_objData.Color, p_objData.Image_Index, p_objData.Start_Date, p_objData.End_Date, p_objData.Manday, p_objData.Note, p_objData.Last_Updated_By);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Delete_Resources(int p_iID, string p_strLast_Updated_User)
        {
            try
            {
                CSqlHelper.ExecuteNonquery(CConfig.g_strGem_Tools_Conn_String, "sp_del_Resources", p_iID, p_strLast_Updated_User);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public IList<CResources> A0011_sp_sel_List_Resources_By_Project_ID(int pProject_ID)
        {
            IList<CResources> v_arrResources = new List<CResources>();
            DataTable v_dt = new DataTable();

            try
            {
                CSqlHelper.FillDataTable(CConfig.g_strGem_Tools_Conn_String, v_dt, "A0011_sp_sel_List_Resources_By_Project_ID", pProject_ID);

                foreach (DataRow v_row in v_dt.Rows)
                {
                    CResources v_objResources = new CResources();
                    MapResources(v_row, v_objResources);
                    v_arrResources.Add(v_objResources);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                v_dt.Dispose();
            }

            return v_arrResources;
        }

    }
}
